package com.zyh.exception;

/*
       1. 当try 或者 catch中有return , 但是finally中没有return , 那么finally中的代码不影响最终的返回结果
     2. try和catch语句中的return不会阻止finally中代码的运行 System.exit(0);
     3. 当try , catch , finally 中都有return时，使用的是：finally中的
 */

public class Test2 {
    static int i = 0;
    public static void main(String[] args) {
        int i = Test2.method2();
        System.out.println("i = " + i);     //i=2
    }
    public static int method2(){
        try {
            int result = 10 / 0;
            ++i;                //前面出现异常，不执行
            return ++i;         //不执行
        } catch (ArithmeticException e) {//捕获正确的异常类型，执行catch
            return ++i;         //i=1
        }finally {
            return ++i;         //finally中有return则最后返回finally中的值，i=2
        }
    }
    public static void main1(String[] args) {
        int i = Test2.method1();
        System.out.println("i = " + i);//i=1
    }
    public static int method1() {
        try {
            return ++i; //没有异常，执行,i=1
        } catch (ArithmeticException e) {//try中没有异常，不执行catch
            return ++i;//不执行
        } finally {//执行
            ++i;//没有return则不影响try和catch中的返回值
            System.out.println("finally中i = " + i);//i=2
        }
    }
}
